import re
from pathlib import Path
from rich.progress import Progress

def extract_content_multiline(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        content = file.read()
        # DOTALL标志使.匹配包括换行符在内的所有字符
        matches = re.findall(r'\{\{(.*?)\}\}', content, re.DOTALL)
        # 去除每行的空白字符和可能的换行符
        return [match.strip() for match in matches]
#所有






#最外层
def find_outer_braces(file_path):
    """
    找出 txt 文件中的所有最外层 '{{' 和 '}}' 之间的内容（忽略嵌套），并以列表返回。
    使用堆栈方法确保只匹配最外层。

    参数:
        file_path (str): 要读取的 txt 文件路径

    返回:
        list: 包含所有最外层 '{{' 和 '}}' 之间内容的列表
    """
    with open(file_path, 'r', encoding='utf-8') as file:
        text = file.read()

    stack = []
    results = []
    i = 0
    n = len(text)

    while i < n - 1:  # 至少需要 2 个字符才能匹配 {{
        if text[i] == '{' and text[i+1] == '{':
            stack.append(i)  # 记录 {{ 的位置
            i += 2  # 跳过 {{
        elif text[i] == '}' and text[i+1] == '}' and stack:
            start = stack.pop()  # 弹出匹配的 {{
            if not stack:  # 如果堆栈为空，说明是最外层的 }}
                content = text[start+2 : i]  # 去掉 {{ 和 }}
                results.append(content)
            i += 2  # 跳过 }}
        else:
            i += 1

    return results

# 示例用法
# matches = find_outer_braces('example.txt')
# print(matches)


# 使用示例
li=[]



# 获取当前脚本所在目录
current_dir = Path(__file__).parent
# 获取上一级目录
parent_dir = current_dir.parent

tab_list=['折叠', '图片放大', '任务', '短信选项', '提示', '剧情选项', \
          '黑幕', '角色对话', '提示消息', '任务描述', '短信警告', '颜色', '注音', '图标', '事件']
def clean():
    for tab in tab_list:
        tab_abook='organize_did\\such_books\\'+tab+'_all_book.txt'
        tab_fbook='organize_did\\such_books\\'+tab+'_first_book.txt'
        tab_ab=open(tab_abook,'w',encoding='utf-8')
        tab_fb=open(tab_fbook,'w',encoding='utf-8')
        tab_ab.close()
        tab_fb.close()

clean()
    
pro=Progress()
for tab in tab_list:
    
    tab_abook='organize_did\\such_books\\'+tab+'_all_book.txt'
    tab_fbook='organize_did\\such_books\\'+tab+'_first_book.txt'
    tab_ab=open(tab_abook,'a+',encoding='utf-8')
    tab_fb=open(tab_fbook,'a+',encoding='utf-8')
    txt_book_list = []
    for i in parent_dir.rglob('*.txt'):
        txt_book_list.append(i)
    task=pro.add_task(tab+'_read',total=len(txt_book_list))
    
    # 遍历上一级目录及其子目录中的所有txt文件
    for txt_file in txt_book_list:
        # 处理文件路径 print(txt_file)  
        #with open(txt_file, 'r', encoding='utf-8') as f:
        #    content = f.read()
        #    content = organise_content(content)
        #    print(content[0:200])
        #    print('='*10)
            # 处理文件内容...

        file_path = txt_file
        results = extract_content_multiline(file_path)

        for i in results:
            i_type=i.split('|', 1)[0].strip()
            #li.append(i_type)
            if i_type == tab:
                tab_ab.write(i+'\n')
                tab_ab.write('='*10+'\n')
                
        results = find_outer_braces(file_path)

        for i in results:
            i_type=i.split('|', 1)[0].strip()
            #li.append(i_type)
            if i_type == tab:
                tab_fb.write(i+'\n')
                tab_ab.write('='*10+'\n')
        pro.update(task, advance=1)
    tab_ab.close()
    tab_fb.close()
    print(tab+' is ok')

#print(len(li))
#lis=list(set(li))
#print(lis)





#非最外层
#7429
#['折叠', '图片放大', '任务', '短信选项', '提示', '剧情选项', '黑幕', '角色对话', '提示消息', '任务描述', '短信警告', '颜色', '注音', '图标', '事件']

#最外层
#5947
#['折叠', '图片放大', '任务', '短信选项', '提示', '剧情选项', '黑幕', '角色对话', '提示消息', '任务描述', '短信警告', '颜色', '注音']
#                                           -                  -                   -                                -              -